package com.hik.rpq.proxy.FactoryProxy.example.cart;

import com.hik.rpq.proxy.FactoryProxy.example.entity.Item;

import java.math.BigDecimal;

/**
 * @author renpeiqian
 * @date 2021/8/19 9:16
 * @since
 */
public class UserCart  extends AbstractCart{
    /**
     *
     * 购物车面对不同的用户有不同的计算策略
     * 普通用户需要收取运费，运费是商品价格的 10%，无商品折扣；
     * VIP 用户同样需要收取商品价格 10% 的快递费，但购买两件以上相同商品时，第三件开始享受一定折扣；
     * 内部用户可以免运费，无商品折扣。
     */
   /**
    * 将map的参数 转为为Cart类型
    * @param userId 用户id
    * @param items key：itemId value：count
    * @return com.hik.rpq.proxy.FactoryProxy.example.entity.Cart
    */
//    public Cart transfer(long userId, Map<Long,Integer> items){
//        Cart cart = new Cart();
//
//        List<Item> itemList  =new ArrayList<>();
//
//        //map 2 item
//        items.entrySet().stream().forEach( entry-> {
//            Item item = new Item();
//            item.setId(entry.getKey());
//            item.setQuantity(entry.getValue());
//            item.setPrice(new BigDecimal("52"));
//            itemList.add(item);
//        });
//        cart.setItems(itemList);
//
//        //处理商品优惠及运费
//        itemList.stream().forEach( item -> {
//
//        });
//
//        //核算
//
//        //总优惠
//        cart.setTotalDiscount(BigDecimal.ZERO);
//
//        //商品总价
//
//        cart.setTotalItemPrice(cart.getItems().stream().map(
//                item -> item
//                        .getPrice()
//                        .multiply(BigDecimal.valueOf(item.getQuantity())))
//                        .reduce(BigDecimal.ZERO, BigDecimal::add));
//
//        //计算运费总价
//        cart.setTotalDeliveryPrice(cart.getItems().stream().map(Item::getDeliveryPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
//
//        //计算总优惠
//        cart.setTotalDiscount(cart.getItems().stream().map(Item::getCouponPrice).reduce(BigDecimal.ZERO, BigDecimal::add));
//
//        //应付总价=商品总价+运费总价-总优惠
//        cart.setPayPrice(cart.getTotalItemPrice().add(cart.getTotalDeliveryPrice()).subtract(cart.getTotalDiscount()));
//
//        return cart;
//
//    }

    @Override
    protected void processDeliveryPrice(long userId, Item item) {
        item.setDeliveryPrice(item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())).multiply(new BigDecimal("0.1")));

    }

    @Override
    protected void processCouponPrice(long userId, Item item) {
        item.setDeliveryPrice(BigDecimal.ZERO);

    }
}
